﻿using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using Com.queryzer2.Domain;
using common;
using common.pages;
using Com.queryzer2.Domain.Entities;

namespace Com.AlbLab.CR.Web.pages
{
    public partial class CaricaPratiche: BasePage
    {
        InputPratiche.Pratiche.CaricamentoPratiche _PraticheCaricamento;

        protected void Page_Load(object sender, EventArgs e)
        {
            Double KindAccess;

            if (!(double.TryParse(Request.QueryString["KA"],out KindAccess)) )
            {
                KindAccess=1;
            }
            
            PNL_datiCaricamento.Visible = false;
            PNL_pratiche.Visible = false;

            if ((Page.IsPostBack) || (KindAccess == 2))
            {
                if (Session["ElencoPraticheCarica"] != null)
                {
                    _PraticheCaricamento = (InputPratiche.Pratiche.CaricamentoPratiche)Session["ElencoPraticheCarica"];
                    LBL_filecaricato.Text = _PraticheCaricamento.InputFileName;
                    PNL_datiCaricamento.Visible = true;
                    BuildGriglia();
                }
            }
            else 
            {
                Session["ElencoPraticheCarica"] = null;
            }
        }

        protected virtual void Page_Prerender(object sender, EventArgs e)
        {
            BTN_salvadb.Visible = false;
            BTN_risposta_ammiss.Visible = false;
            if (Session["ElencoPraticheCarica"] != null)
            {
                BTN_salvadb.Visible = (_PraticheCaricamento.PraticheAmmissibili > 0) && (_PraticheCaricamento.Salvate != _PraticheCaricamento.PraticheAmmissibili);
                BTN_risposta_ammiss.Visible = (_PraticheCaricamento.PraticheAmmissibili == 0) || ((_PraticheCaricamento.PraticheAmmissibili > 0) && (_PraticheCaricamento.Salvate == _PraticheCaricamento.PraticheAmmissibili) && (_PraticheCaricamento.Salvate != 0));
            }
        }

        protected void BTN_carica_Click(object sender, EventArgs e)
        {
            string cFileName;

            LBL_messaggio.Text = "";
            if (FileUpload1.HasFile)
            {
                cFileName = System.IO.Path.GetFileName(FileUpload1.PostedFile.FileName);
                cFileName = Server.MapPath("~/App_Data") + System.IO.Path.DirectorySeparatorChar + cFileName;
                FileUpload1.PostedFile.SaveAs(cFileName);
                _PraticheCaricamento = new InputPratiche.Pratiche.CaricamentoPratiche();
                _PraticheCaricamento.Servizio = Services;
                _PraticheCaricamento.QueryStoreFLD = Server.MapPath("~/QueryStore/");
                _PraticheCaricamento.CaricaFilePratiche(cFileName);
                if (!_PraticheCaricamento.IsErrore)
                {
                    Session["ElencoPraticheCarica"] = _PraticheCaricamento;
                }
                else
                {
                    info.AddMessage(string.Concat("Errore nel caricamento del file. Descrizione dell'errore: ", _PraticheCaricamento.DescrizioneErrore), LivelloMessaggio.ERROR);
                    Session["ElencoPraticheCarica"] = null;
                }
                LBL_filecaricato.Text = FileUpload1.PostedFile.FileName;
                PNL_datiCaricamento.Visible = true;
            }
            else
            {
                info.AddMessage("Attenzione! Occorre specificare un file da caricare.", LivelloMessaggio.ERROR);
                Session["ElencoPraticheCarica"] = null;
            }

            if (Session["ElencoPraticheCarica"] != null)
            {
                BuildGriglia();
            }
        }

        protected void BTN_salvadb_Click(object sender, EventArgs e)
        {
            Decimal nRecDB;
            Boolean SomeError;

            SomeError = false;
            foreach (queryzer2.Domain.Entities.PraticaBase Pratica in _PraticheCaricamento.PraticheDB)
            {
                try
                {
                if (Pratica.IsAmmissibile)
                {
                    Pratica.GEP_testata.Tes_Stato = 5;
                    //switch (Pratica.CodiceServizio)
                    //{
                    //    case "D01":
                    //        Services.GEP_DATID01Service.insertPratica((GEP.Domain.Entities.GEP_DATID01)Pratica.RecordDB);
                    //        nRecDB = ((GEP.Domain.Entities.GEP_DATID01)Pratica.RecordDB).Id_dd01_cod_pratica;
                    //        break;
                    //    case "M01":
                    //        Services.GEP_DATIM01Service.insertPratica((GEP.Domain.Entities.GEP_DATIM01)Pratica.RecordDB);
                    //        nRecDB = ((GEP.Domain.Entities.GEP_DATIM01)Pratica.RecordDB).Id_dm01_cod_pratica;
                    //        break;
                    //    case "M02":
                    //        Services.GEP_DATIM02Service.insertPratica((GEP.Domain.Entities.GEP_DATIM02)Pratica.RecordDB);
                    //        nRecDB = ((GEP.Domain.Entities.GEP_DATIM02)Pratica.RecordDB).Id_dm02_cod_pratica;
                    //        break;
                    //    case "R01":
                    //        Services.GEP_DATIR01Service.insertPratica((GEP.Domain.Entities.GEP_DATIR01)Pratica.RecordDB);
                    //        nRecDB = ((GEP.Domain.Entities.GEP_DATIR01)Pratica.RecordDB).Id_dr01_cod_pratica;
                    //        break;
                    //    case "V01":
                    //        Services.GEP_DATIV01Service.insertPratica((GEP.Domain.Entities.GEP_DATIV01)Pratica.RecordDB);
                    //        nRecDB = ((GEP.Domain.Entities.GEP_DATIV01)Pratica.RecordDB).Id_dv01_cod_pratica;
                    //        break;
                    //    case "V02":
                    //        Services.GEP_DATIV02Service.insertPratica((GEP.Domain.Entities.GEP_DATIV02)Pratica.RecordDB);
                    //        nRecDB = ((GEP.Domain.Entities.GEP_DATIV02)Pratica.RecordDB).Id_dd01_cod_pratica;
                    //        break;
                    //    default:
                    //        Services.GEP_DATINSTService.insertPratica((GEP.Domain.Entities.GEP_DATI_NOSTD)Pratica.RecordDB);
                    //        nRecDB = ((GEP.Domain.Entities.GEP_DATI_NOSTD)Pratica.RecordDB).Id_Nst_Cod_Pratica;
                    //        break;
                    //}
                    //AggiungiFaseBase(nRecDB, Pratica.CodiceServizio);
                    //Pratica.IsSaved = true;
                }
                }
                catch (Exception ex)
                {
                    SomeError = true;
                    info.AddMessage(string.Concat("Pratica non salvata. Errore: ",ex.Message), LivelloMessaggio.ERROR);
                    LBL_messaggio.Text = string.Concat("Salvataggio concluso con errore. <br>Descrizione errore: ",ex.Message);
                }
            }
            if (!SomeError)
            {
                info.AddMessage("Salvataggio pratiche concluso.", LivelloMessaggio.ERROR);
                LBL_messaggio.Text = "Salvataggio concluso correttamente.";
            }
            LBL_messaggio.Visible = (LBL_messaggio.Text != "");
            Session["ElencoPraticheCarica"] = _PraticheCaricamento;
        }

        protected void BTN_test_Click(object sender, EventArgs e)
        {
            common.TempSession.setBag("CODICE_PRATICA", "148");
            Response.Redirect("~/Pratiche/PaginePratiche/PST_D01.aspx?KAP=2");
        }

        protected void BTN_risposta_ammiss_Click(object sender, EventArgs e)
        {
            System.IO.StreamWriter sw;
            System.IO.FileStream sr;
            string cFileName;
            

            cFileName =  String.Concat(Server.MapPath("~/App_Data"),"/",DateTime.Now.ToString("yyyyMMddHHmmss"),"_risposte_ammissibilita.csv");   
            sw = new System.IO.StreamWriter(cFileName);
            sw.WriteLine("cod_servizio;cod_flusso;piva_utente;piva_distributore;cod_prat_utente;cod_prat_distr;verifica_amm;cod_causale;motivazione");
            foreach (queryzer2.Domain.Entities.PraticaBase Pratica in _PraticheCaricamento.PraticheDB)
            {
                sw.WriteLine(Pratica.RigaAmmissibilita());
            }
            sw.Close();

            sr =  System.IO.File.Open(cFileName,System.IO.FileMode.Open );
            Byte[] btFile;
            btFile = new Byte[Convert.ToInt32(sr.Length)];
            sr.Read( btFile,0, Convert.ToInt32(sr.Length));
            sr.Close();
     
            
                this.Response.Clear();
                this.Response.ContentType = "text/plain";
                this.Response.AppendHeader("Content-Disposition", "attachment; filename=" + System.IO.Path.GetFileName( cFileName));
                this.Response.BinaryWrite(btFile);
                this.Response.End();
            
        }

        protected void BuildGriglia()
        {
            GrigliaGenerica1.ViewSelect = true;
            GrigliaGenerica1.NumColonne = 8;
            GrigliaGenerica1.H0 = "Cod. tipo";
            GrigliaGenerica1.H1 = "Cod. flusso";
            GrigliaGenerica1.H2 = "Descrizione tipo";
            GrigliaGenerica1.H3 = "Tipo pratica";
            GrigliaGenerica1.H4 = "Ammissibile";
            GrigliaGenerica1.H5 = "Descrizione non amm.";
            GrigliaGenerica1.H6 = "Note ammissibilità";
            GrigliaGenerica1.Visible = true;
            GrigliaGenerica1.DataSource = common.ToGenericListTransformers.transform(_PraticheCaricamento.PraticheDB);
            GrigliaGenerica1.DataBind();
            PNL_pratiche.Visible = true;
        }

        protected void GrigliaGenerica1_OnSelect(string commandName, GenericListDTO row)
        {
            int nPraticaID = 0;
            GrigliaGenerica1.Clear();
            common.TempSession.setBag("CODICE_PRATICA",row.Id);

            switch (_PraticheCaricamento.PraticheDB[nPraticaID].CodiceServizio)
            {
                case "D01":
                    Response.Redirect("~/Pratiche/PaginePratiche/PST_D01.aspx?KAP=1");
                    break;
                case "M01":
                    Response.Redirect("~/Pratiche/PaginePratiche/PST_M01.aspx?KAP=1");
                    break;
                case "M02":
                    Response.Redirect("~/Pratiche/PaginePratiche/PST_M02.aspx?KAP=1");
                    break;
                case "R01":
                    Response.Redirect("~/Pratiche/PaginePratiche/PST_R01.aspx?KAP=1");
                    break;
                case "V01":
                    Response.Redirect("~/Pratiche/PaginePratiche/PST_V01.aspx?KAP=1");
                    break;
                case "V02":
                    Response.Redirect("~/Pratiche/PaginePratiche/PST_V02.aspx?KAP=1");
                    break;
                case "AP0":
                    Response.Redirect("~/Pratiche/PaginePratiche/PNS_AP0.aspx?KAP=1");
                    break;
                case "CA0":
                    Response.Redirect("~/Pratiche/PaginePratiche/PNS_CA0.aspx?KAP=1");
                    break;
                case "CF0":
                    Response.Redirect("~/Pratiche/PaginePratiche/PNS_CF0.aspx?KAP=1");
                    break;
                case "CT0":
                    Response.Redirect("~/Pratiche/PaginePratiche/PNS_CT0.aspx?KAP=1");
                    break;
                case "EL0":
                    Response.Redirect("~/Pratiche/PaginePratiche/PNS_EL0.aspx?KAP=1");
                    break;
                case "EL1":
                    Response.Redirect("~/Pratiche/PaginePratiche/PNS_EL1.aspx?KAP=1");
                    break;
                case "PR0":
                    Response.Redirect("~/Pratiche/PaginePratiche/PNS_PR0.aspx?KAP=1");
                    break;
                case "RE0":
                    Response.Redirect("~/Pratiche/PaginePratiche/PNS_RE0.aspx?KAP=1");
                    break;
                case "RE1":
                    Response.Redirect("~/Pratiche/PaginePratiche/PNS_RE1.aspx?KAP=1");
                    break;
                case "RF0":
                    Response.Redirect("~/Pratiche/PaginePratiche/PNS_RF0.aspx?KAP=1");
                    break;
                case "SB0":
                    Response.Redirect("~/Pratiche/PaginePratiche/PNS_SB0.aspx?KAP=1");
                    break;
                case "SG0":
                    Response.Redirect("~/Pratiche/PaginePratiche/PNS_SG0.aspx?KAP=1");
                    break;
                case "SG1":
                    Response.Redirect("~/Pratiche/PaginePratiche/PNS_SG1.aspx?KAP=1");
                    break;
                case "SI0":
                    Response.Redirect("~/Pratiche/PaginePratiche/PNS_SI0.aspx?KAP=1");
                    break;
                case "SM0":
                    Response.Redirect("~/Pratiche/PaginePratiche/PNS_SM0.aspx?KAP=1");
                    break;
                case "SW0":
                    Response.Redirect("~/Pratiche/PaginePratiche/PNS_SW0.aspx?KAP=1");
                    break;
                case "SW1":
                    Response.Redirect("~/Pratiche/PaginePratiche/PNS_SW1.aspx?KAP=1");
                    break;
                case "VA0":
                    Response.Redirect("~/Pratiche/PaginePratiche/PNS_VA0.aspx?KAP=1");
                    break;
                case "VP0":
                    Response.Redirect("~/Pratiche/PaginePratiche/PNS_VP0.aspx?KAP=1");
                    break;
                case "VT0":
                    Response.Redirect("~/Pratiche/PaginePratiche/PNS_VT0.aspx?KAP=1");
                    break;
            }
            //if (RadioAzNom.Checked)
            //    Response.Redirect("ConfNonDomestico.aspx");
            //else if (RadioPriNom.Checked)
            //{
            //    if (row.Id.Contains("/3"))
            //        Response.Redirect("ConfDomiciliare.aspx");
            //    else if (row.Id.Contains("/4"))
            //        Response.Redirect("ConfDomiciliareSfalci.aspx");
            //    else
            //        Response.Redirect("ConfDomestico.aspx");
            //}
            //else if (RadioSpeNom.Checked)
            //    Response.Redirect("SpedizioneRecupero.aspx");
            //else if (RadioConsNom.Checked)
            //    Response.Redirect("ConsegnaCompostiere.aspx");
            //else if (RadioDiffNom.Checked)
            //    Response.Redirect("ContenitoriRaccoltaDifferenziata.aspx");
            //else if (RadioSmarrNom.Checked)
            //    Response.Redirect("DichiarazionePerditaPossesso.aspx");
        }

        void AggiungiFaseBase(decimal IDPratica,string CodServ)
        {
            queryzer2.Domain.Entities.GEP_FASE faseBase;

            faseBase = new queryzer2.Domain.Entities.GEP_FASE(10, IDPratica, CodServ, 1);
            //faseBase.FAS_DES_FASE,     -->la descfrizxione della fase in GEP_ANA_FASE corrispondente (es.: la descrizione in D01,10)
            //ALBERTO, INSERITO RIFERIMENTO AD ANAG_FASE PER PRENDERE LA DESCRIZIONE DELLA FASE
            //ALBERTO,AGGIORNATO VALORE FASE INIZIALE DA 1 a 10
            faseBase.Gep_ana_fase = BasePage.Services.AnagraficheService.getListaFasi()[new GEP_ANA_FASE.GEP_ANA_FASE_ID(CodServ, 10)];
            faseBase.Fas_Progr_Fase=1;
            faseBase.Fas_Unit_Oper= "COMMERCIALE";
            faseBase.Fas_Dt_Arrivo= DateTime.Now;
            faseBase.Gep_ana_statof.Id_stf_cod_stato="1";
            Services.GestioneFasiService.InsertFase(faseBase);
        }
    }

}
